gdk/wayland: Don't remap non-subsurface as subsurface
authorJonas Ådahl <jadahl@gmail.com>
Fri, 10 Aug 2018 15:07:05 +0000 (17:07 +0200)
committerJonas Ådahl <jadahl@gmail.com>
Fri, 10 Aug 2018 16:32:54 +0000 (18:32 +0200)
Let's just use the fact that a window was mapped as a subsurface to
remap it above another transient parent instead of relying on the more
complicated 'should-map-as-subsurface' helper function.

gdk/wayland/gdkwindow-wayland.c

index 3da3ac5b6847e2bf8d4bcd7dff6073fbbeb83940..fa3e0e48a0812c3829ca9c9164115fedebf7955a 100644 (file)
@@ -3799,6 +3799,7 @@ gdk_wayland_window_set_transient_for (GdkWindow *window,
   GdkWaylandDisplay *display_wayland =
     GDK_WAYLAND_DISPLAY (gdk_window_get_display (window));
   GdkWindow *previous_parent;
+  gboolean was_subsurface = FALSE;
 
   g_assert (parent == NULL ||
             gdk_window_get_display (window) == gdk_window_get_display (parent));
@@ -3812,7 +3813,10 @@ gdk_wayland_window_set_transient_for (GdkWindow *window,
   unset_transient_for_exported (window);
 
   if (impl->display_server.wl_subsurface)
-    unmap_subsurface (window);
+    {
+      was_subsurface = TRUE;
+      unmap_subsurface (window);
+    }
 
   previous_parent = impl->transient_for;
   impl->transient_for = parent;
@@ -3825,9 +3829,10 @@ gdk_wayland_window_set_transient_for (GdkWindow *window,
         display_wayland->orphan_dialogs =
           g_list_remove (display_wayland->orphan_dialogs, window);
     }
+
   gdk_wayland_window_sync_parent (window, NULL);
-  if (should_map_as_subsurface (window) &&
-      parent && gdk_window_is_visible (window))
+
+  if (was_subsurface && parent)
     gdk_wayland_window_create_subsurface (window);
 }